﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using OOP;
namespace DAL
{
    public class DataAccess
    {
        SqlCommand cm;
        SqlDataReader dr;
        SqlConnection con= new SqlConnection();
        ARCUSTOMER cust;
        public DataAccess()//phương thức khởi tạo DataAccess không tham số khi gọi đến phương thức này sẽ thực hiện  mở kết nối nếu kết nối đang ở trạng thái đóng
        {
            //thiết lập kết nối đến database sử dụng chuỗi kết nối dến database trong web.config
            con.ConnectionString = ConfigurationManager.ConnectionStrings["NalfeDemoConnectionString"].ConnectionString;
            if (con.State == ConnectionState.Closed)//kiểm tra kết nối có đang ở trạng thái đóng
            {
                con.Open();//nếu ở trạng thái đóng thì mở kết nối
            }
        }
        /* tạo hàm đóng kết nối*/
        public void Close_Connect()
        {
            if (con.State == ConnectionState.Open)//kiểm tra kết nối có đang ở trạng thái mở
            {
                con.Close();//nếu ở trạng thái mở thì đóng kết nối
            }
        }
        /*hàm load dữ liệu cutomer từ database*/
        public List<ARCUSTOMER> LoadCustomer()
        {
            if (con.State == ConnectionState.Closed)
            con.Open();
            string connectstring = "select CustID,customer_name,[address],ProvinceCode,TownCode,Channel,Active from ARCUSTOMER";
            cm=new SqlCommand(connectstring,con);
            dr=cm.ExecuteReader();
            List<ARCUSTOMER> list = new List<ARCUSTOMER>();
            while(dr.Read())
            {
                cust = new ARCUSTOMER();
                cust.CustID = dr[0].ToString();
                cust.Customername = dr[1].ToString();
                cust.Address = dr[2].ToString();
                cust.ProvinceCode = dr[3].ToString();
                cust.TownCode = dr[4].ToString();
                cust.Channel =Convert.ToInt32( dr[5].ToString());
                cust.Active =Convert.ToBoolean( dr[6].ToString());
                list.Add(cust);
            }
            dr.Close();
            Close_Connect();
            return list;
        }
        public List<string> LoadTownCode(string TownCode) /*hàm load dữ liệu TownCode từ database*/
        {
            if (con.State == ConnectionState.Closed)
                con.Open();
            string connectstring = "select distinct TownCode from ARCUSTOMER where TownCode like '%"+TownCode+"%'";
            cm = new SqlCommand(connectstring, con);
            dr = cm.ExecuteReader();
            List<string> list = new List<string>();
            while (dr.Read())
            {
                //ARCUSTOMER cu = new ARCUSTOMER();
                //cu.TownCode = dr[0].ToString();
                list.Add(dr[0].ToString());
            }
            dr.Close();
            Close_Connect();
            return list;
        }
        public List<string> LoadTownCode() /*hàm load dữ liệu TownCode từ database*/
        {
            if (con.State == ConnectionState.Closed)
                con.Open();
            string connectstring = "select distinct TownCode from ARCUSTOMER  ";
            cm = new SqlCommand(connectstring, con);
            dr = cm.ExecuteReader();
            List<string> list = new List<string>();
            while (dr.Read())
            {
                //ARCUSTOMER cu = new ARCUSTOMER();
                //cu.TownCode = dr[0].ToString();
                list.Add(dr[0].ToString());
            }
            dr.Close();
            Close_Connect();
            return list;
        }
        public int UpdateCustomer(ARCUSTOMER custom)/*hàm sửa customer */
        {
            try
            {
            con.Open();
            string query = "update ARCUSTOMER set customer_name=@customer_name,[address]=@address,ProvinceCode=@ProvinceCode,TownCode=@TownCode,Channel=@channel,Active=@Active where CustID=@custid ";
                cm = new SqlCommand();
                cm.Connection = con;
                cm.CommandText = query;
                /*các parameter cần truyền*/
                cm.Parameters.AddWithValue("@customer_name", custom.Customername);
                cm.Parameters.AddWithValue("@address", custom.Address);
                cm.Parameters.AddWithValue("@ProvinceCode",custom.ProvinceCode);
                cm.Parameters.AddWithValue("@TownCode", custom.TownCode);
                cm.Parameters.AddWithValue("@channel",custom.Channel);
                cm.Parameters.AddWithValue("@Active", custom.Active);
                cm.Parameters.AddWithValue("@custid",custom.CustID);
                cm.ExecuteNonQuery();
                Close_Connect();
                return 1;
            }
            catch
            {
                return 0;
            }
        }
        public int InsertCustomer(ARCUSTOMER custom)/*hàm thêm customer*/
        {
            try
            {
                con.Open();
                string query = "insert into ARCUSTOMER (CustID,customer_name,[address],ProvinceCode,TownCode,Channel,Active) values(@custid ,@customer_name,@address,@ProvinceCode,@TownCode,@channel,@Active) ";
                cm = new SqlCommand();
                cm.Connection = con;
                cm.CommandText = query;
                cm.Parameters.AddWithValue("@customer_name", custom.Customername);
                cm.Parameters.AddWithValue("@address", custom.Address);
                cm.Parameters.AddWithValue("@ProvinceCode", custom.ProvinceCode);
                cm.Parameters.AddWithValue("@TownCode", custom.TownCode);
                cm.Parameters.AddWithValue("@channel", custom.Channel);
                cm.Parameters.AddWithValue("@Active", custom.Active);
                cm.Parameters.AddWithValue("@custid", custom.CustID);
                cm.ExecuteNonQuery();
                Close_Connect();
                return 1;
            }
            catch
            {
                return 0;
            }
        }
        public int DeleteCustomer(string id)/*hàm xóa customer*/
        {
            try
            {
                con.Open();
                string query = "delete from ARCUSTOMER  where CustID=@custid ";
                cm = new SqlCommand();
                cm.Connection = con;
                cm.CommandText = query;
                cm.Parameters.AddWithValue("@custid",id);
                cm.ExecuteNonQuery();
                Close_Connect();
                return 1;
            }
            catch
            {
                return 0;
            }
        }
    }
}
